package com.study.行为型模式.模板方法模式.钩子方法;

public abstract class SoyaMike {

    //模板方法,make,模板方法做成final，不让子类去覆盖
    final void make(){
        select();
        if (customerWantCondiments()){
            addCondiments();
        }
        soak();
        beat();
    }

    //选材料
    private void select(){
        System.out.println("第一步：选择新鲜的黄豆");
    }

    //添加不同的配料，抽象方法
    abstract void addCondiments();

    //浸泡
    private void soak(){
        System.out.println("第三步：黄豆和配料开始浸泡");
    }

    private void beat(){
        System.out.println("第四步：黄豆和配料放到豆浆机去打碎");
    }

    //钩子方法，决定是否需要添加配料
    boolean customerWantCondiments(){
        return true;
    }
}
